/**
 *  
 *  Copyright (c) 2011,
 *  GaoTime
 *  All rights reserved.
 *   
 *  @file       HttpTools.h
 *  @brief      HTTP通信工具
 *   
 *  本工具依赖Tools中的TBOOL类
 *   
 *  @version    1.1
 *  @author     imuse
 *  @date       2011-06-16
 *   
 *   
 *  修订说明：最初版本  
 */
#ifndef HTTP_TOOLS_H
#define HTTP_TOOLS_H


#include "Tools.h"

///默认GET类型
#define GET_MODE_TYPE "application/x-www-form-urlencoded"
///默认POST类型
#define POST_MODE_TYPE "application/x-www-form-urlencoded"

///http状态
enum HTTP_STATE_tag
{
    ///加载完成
	HTTP_STATE_FINISH = 0,
    ///加载超时
	HTTP_STATE_TIME_OUT,
    ///加载出错
	HTTP_STATE_NET_ERROR,
};

///HTTP结构体
typedef struct HTTP_TOOLS_tag
{
	///请求地址
	char *pUrl;
	///发送数据
	void		*pSendData;
	///发送数据长度
	int			nSendLen;
	///请求数据类型
	char		*pContentType;
  ///请求设置头数据
  char        *pHeadData;
	///接收数据后的回调参数
	void *pCBObj;
	///接收数据后的回调函数
	void(*pResedData)(struct HTTP_TOOLS_tag *pHttp, int nType);
	
	///返回数据长度
	int			nRecvDataLen;
	///返回数据内容
	char		*pRecvData;
	///是否已经被取消
	TBOOL	isCancel;
	///唯一标识
	int nIndex;
	
	/********************************以下属性与平台相关***********************************/
	void *pIHttp;
	
	
}HTTP_TOOLS;

/**通过网络获取数据
 *
 *  @param int      nIndex		取消的http id(如果没有要取消的请求该值传0)
 *  @param char     *pUrl		url地址
 *  @param void		*pData		发送数据地址
 *  @param int		nLen		发送数据长度
 *  @param char     *pType		发送HTTP头中的Content－Type类型（如果不知道请传NULL）
 *  @param void(*pResedData)	数据回调方法（数据成功失败时回调方法）
 *  @param void     *pCBObj     数据回调时回调的对象
 *
 *  @return 当前http对象id
 */
int HttpTools_GetData(int nIndex,  char *pUrl, void *pData, int nLen, char *pType,
						  void(*pResedData)(struct HTTP_TOOLS_tag *pHttp, int nType),
						  void *pCBObj);

///扩展
int HttpTools_GetDataEx(int nIndex,  char *pUrl, void *pData, int nLen, char *pType, char *pHead,
                        void(*pResedData)(struct HTTP_TOOLS_tag *pHttp, int nType),
                        void *pCBObj);
/**取消一个http请求
 *
 *  @param int      nIndex		取消的http id
 *
 *  @return －
 */
void HttpTools_Cancel(int nIndex);

/**底层http请求回调方法
 *
 *  @param HTTP_TOOLS_tag  *pHttp		http对象
 *  @param int              nType       状态(HTTP_STATE_tag)
 *
 *  @return －
 */
void HttpTools_ResedData(struct HTTP_TOOLS_tag *pHttp, int nType);

#endif


